/**
 * Created by levon on 2017/11/23.
 */
define(function (require) {
    var $ = require('jquery'),
        Handlebars = require('Handlebars'),
        handlebarsHtml = require('text!../template/handlebarsTest.html'),
        eachEachHtml = require('text!../template/eachEach.html'),
        ifElseHtml = require('text!../template/if_else.html'),
        unlessHtml = require('text!../template/unless.html'),
        withHtml = require('text!../template/with.html'),
        personIndexHtml = require('text!../template/personIndex.html');
    
    Handlebars.registerHelper('debug', function (optionalValue) {
        console.info('Current Context ========== ' + JSON.stringify(this));
        console.log(this);
        if (optionalValue) {
            console.info('Value ========== ' + JSON.stringify(optionalValue));
            console.log(optionalValue);
        }
    });

    // 循环
    $.getJSON('./dummy/ossFile.json', function (response) {
        var template = Handlebars.compile(handlebarsHtml);
        $('#eachContainer').html(template(response));
    });
    // each-each 循环
    $.getJSON('./dummy/each_each.json', function (response) {
        var template = Handlebars.compile(eachEachHtml);
        $('#each_each').html(template(response));
    });
    // if-else 循环
    /**
     * Handlebars.registerHelper用来定义Helper，它有两个参数，第一个参数是Helper名称，第二个参数是一个回调函数，用来执行核心业务逻辑。本例中的函数，有三个参数，其中前两个参数是需要比较的两个数，第三个参数是固定的，就叫options，如果加了该参数，就说明这个Helper是一个Block，块级别的Helper，有一定的语法结构，调用的时候加#号，就像if那样。

     关于options的使用，return options.fn(this);表示满足条件继续执行，也就是执行{{#compare }}和{{else}}之间的代码；return options.inverse(this);表示不满足条件，也就是执行{{else}}和{{/compare}}之间的代码。

     由于这是一个块级别的Helper，所以调用要加#，例如：{{#compare age 20}}，其中的age就是当前上下文中读取到的年龄，20是小菜随便写的值，意思是只要age比20大，就显示，否则全显示?。
     */
    $.getJSON('./dummy/if_else.json', function (response) {
        var template = Handlebars.compile(ifElseHtml);
        Handlebars.registerHelper('compare', function (v1, v2, options) {
            if(v1>v2){
                //满足添加继续执行
                return options.fn(this);
            }else{
                //不满足条件执行{{else}}部分
                return options.inverse(this);
            }
        });
        //注册一个翻译用的Helper，0翻译成男，1翻译成女
        Handlebars.registerHelper("transformat",function(value){
          if(value==0){
            return "男";
          }else if(value==1){
            return "女";
          }
        });
        $('#if_else').html(template(response));
    });
    // unless 循环
    $.getJSON('./dummy/unless.json', function (response) {
        var template = Handlebars.compile(unlessHtml);
        $('#unless').html(template(response));
    });
    // with 获取上下文的内容
    $.getJSON('./dummy/with.json', function (response) {
        var template = Handlebars.compile(withHtml);
        $('#with').html(template(response));
    });
    // index 索引添加
    $.getJSON('./dummy/personIndex.json', function (response) {
        var template = Handlebars.compile(personIndexHtml);
        Handlebars.registerHelper('addOne', function (index) {
            this._index = index +1;
            return this._index
        })
        $('#personIndex').html(template(response));
    });

});